package com.example.controller;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.example.common.Result;
import com.example.common.enums.ResultCodeEnum;
import com.example.entity.UserInfo;
import com.example.exception.CustomException;
import com.example.service.UserService;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * 基础前端接口
 */
@RestController
public class WebController {

    @Resource
    private UserService userService;

    /**
     * 根路径访问接口
     * @return 返回访问成功的响应结果
     */
    @GetMapping("/")
    public Result hello() {
        return Result.success("访问成功");
    }

    /**
     * 用户登录接口
     * 验证用户输入的用户名和密码，如果验证通过则返回认证token
     * @param userInfo 包含用户名和密码的用户信息对象
     * @return 登录成功返回token，失败返回错误信息
     */
    @PostMapping("/login")
    public Result login(@RequestBody UserInfo userInfo) {
        // 验证用户名和密码是否为空
        if (ObjectUtil.isEmpty(userInfo.getUsername()) || ObjectUtil.isEmpty(userInfo.getPassword())) {
            return Result.error(ResultCodeEnum.PARAM_LOST_ERROR);
        }
        // 调用服务层进行登录验证并获取token
        String token = userService.login(userInfo);
        return Result.success(token);
    }

    /**
     * 用户注册接口
     * 创建新用户账户
     * @param userInfo 包含用户名和密码的用户信息对象
     * @return 注册成功返回成功信息，失败返回错误信息
     */
    @PostMapping("/register")
    public Result register(@RequestBody UserInfo userInfo) {
        // 验证用户名和密码是否为空
        if (StrUtil.isBlank(userInfo.getUsername()) || StrUtil.isBlank(userInfo.getPassword())) {
            return Result.error(ResultCodeEnum.PARAM_LOST_ERROR);
        }
        // 调用服务层进行用户注册
        userService.register(userInfo);
        return Result.success();
    }

    /**
     * 修改用户密码接口
     * 根据用户名更新用户密码
     * @param userInfo 包含用户名和新密码的用户信息对象
     * @return 修改成功返回成功信息，失败返回错误信息
     */
    @PutMapping("/update-password")
    public Result updatePassword(@RequestBody UserInfo userInfo) {
        // 验证用户名和密码是否为空
        if (StrUtil.isBlank(userInfo.getUsername()) || StrUtil.isBlank(userInfo.getPassword())) {
            return Result.error(ResultCodeEnum.PARAM_LOST_ERROR);
        }
        // 调用服务层进行密码更新
        userService.updatePassword(userInfo);
        return Result.success();
    }
}
